package controller.gui.mapstratamenu;

import java.awt.event.ActionEvent;

import javax.swing.JButton;

import gui.secondary.StrataSecondaryMenu;
import controller.StrataNumberUser;
import controller.StratumLevelUser;
import controller.gui.OKButtonController;

/**rappresenta il controller che gestisce il pulsante per
 * l'eliminazione dello strato corrente
 * 
 * @author koldar
 * @version 1.0
 */
public final class MapStrataDeleteCurrentController extends OKButtonController<StrataSecondaryMenu> implements StratumLevelUser,StrataNumberUser{

	public MapStrataDeleteCurrentController(JButton button,StrataSecondaryMenu secondaryPanel) {
		super(button, secondaryPanel);
	}

	@Override
	public boolean isParametersCorrect() {
		return true;
	}

	/**elimina lo strato corrente. Ciò è implementabile sotto un particolare algoritmo:
	 * <ul>
	 *  <li>se non c'è uno strato corrente non bisogna fare nulla</li>
	 *  <li>se c'è uno strato corrente lo si elimina e si posiziona il nuovo strato in 
	 *   <ul>
	 *    <li>nello strato precedente</li>
	 *    <li>se non esiste lo strato precedente nello strato 0</li>
	 *    <li>se non esiste lo strato zero si setta stratum a NULL</li>
	 *   </ul>
	 *  </li>
	 * </ul>
	 * 
	 */
	@Override
	public void executeOtherInstruction(ActionEvent arg0) {
		super.executeOtherInstruction(arg0);
		if (this.stratum.getValue()!=this.NOCURRENTSTRATUM){//c'è uno strato e quindi lo posso eliminare
			this.currentmap.removeStratum(this.stratum.getValue());
			//ora devo trovare il nuovo valore di stratum
			if (this.currentmap.getStratiSize()>0){//ci sono altri strati a parte quello che ho già eliminato
				this.stratum.setValue(this.stratum.getValue()==0?0:this.stratum.getValue()-1);
			}else{//non ci sono altri strati
				this.stratum.setValue(this.NOCURRENTSTRATUM);
			}
		}
		this.totalStrata.setValue(this.currentmap.getStratiSize());
	}
	
	

}
